package e164

import (
	"strings"
)

// 整理出号码中有效的号码
// 返回整理后的号码
func getE164Num(tele string) string {
	newTele := []rune{}
	for _, r := range tele {
		switch r {
		case '+', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
			// number is valid
			newTele = append(newTele, r)
		default:
			// number is invalid
		}
	}
	return string(newTele)
}

// 分离原始号码中的国际码
func seperateE164Num(ccode, tidiedNum string) *E164Num {
	newNum := tidiedNum
	e164Num := &E164Num{}
	// 国际呼叫
	internalCall := false
	if strings.Index(newNum, "+") == 0 {
		newNum = newNum[1:] // 移除+号
		internalCall = true
	} else if strings.Index(newNum, "00") == 0 {
		newNum = newNum[2:] // 移除00
		internalCall = true
	} else if strings.Index(newNum, "0") == 0 {
		// 国内号码
		e164Num.ccode = ccode
		e164Num.num = newNum[1:] // 移除地区出局码0
	} else {
		// 国内号码
		e164Num.ccode = ccode
		e164Num.num = newNum
	}

	// 如果是国际号码，使用输入的参数进行检查是否是相同的国家
	if internalCall {
		if strings.Index(newNum, ccode) == 0 {
			// 国内号码
			e164Num.ccode = ccode
			e164Num.num = newNum[len(ccode):] // 移除国际码
		} else {
			// 国际号码
			e164Num.ccode = ""
			e164Num.num = newNum // 注意，此时国际号分离失败
		}
	}

	// 因时间关系，仅对中国的号码作识别, 其他的空值为未知的国际码
	if e164Num.ccode == "" {
		if strings.Index(newNum, "86") == 0 {
			e164Num.ccode = "86"
			e164Num.num = newNum[2:] // 移除国际码
		}
	}
	return e164Num
}
